package com.zp.qualitypractice.rx;

import com.jakewharton.rxrelay2.PublishRelay;
import com.jakewharton.rxrelay2.Relay;

import io.reactivex.Observable;

/**
 * Created by izp on 2017/8/13.
 * * compile 'com.jakewharton.rxrelay2:rxrelay:2.0.0'//出现异常也不会终止订阅关系 不使用第一个rxbus的写法的话，可以不需要这个
 * 这个应该是不支持背压的，因为PublishRelay》Relay》Observable
 */

public class RxbusWithExeption {
        private final Relay<Object> mBus;

        private RxbusWithExeption() {
            // toSerialized method made bus thread safe
            mBus = PublishRelay.create().toSerialized();
        }

        public static RxbusWithExeption get() {
            return Holder.BUS;
        }

        public void post(Object obj) {
//        mBus.onNext(obj);//这个是错误的用法
            mBus.accept(obj);//这个才是Relay的正确用法
        }

        public void post(int code,Object obj) {
//        mBus.onNext(obj);//这个是错误的用法
            mBus.accept(obj);//这个才是Relay的正确用法
        }

        public <T> Observable<T> toObservable(Class<T> tClass) {
            return mBus.ofType(tClass);
        }

        public Observable<Object> toObservable() {
            return mBus;
        }

        public boolean hasObservers() {
            return mBus.hasObservers();
        }

        private static class Holder {
            private static final RxbusWithExeption BUS = new RxbusWithExeption();
        }
}
